package com.atqinke.designpattern.structuraltype.proxy.jdk_proxy;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

/**
 * @BelongsProject: BasicConnection
 * @BelongsPackage: com.atqinke.DesignPattern.structuraltype.proxy.jdk_proxy
 * @Author: NieHk
 * @CreateTime: 2022-08-26  14:59
 * @Description: 生产代理对象
 * @Version: 1.0
 */
public class ProxyFactory {
    private Station station = new Station();

    public SellTickets getProxyFactory(){
        //使用Proxy获取代理对象
        /*
            newProxyInstance()方法参数说明：
                ClassLoader loader ： 类加载器，用于加载代理类
                Class<?>[] interfaces ： 真实对象所实现的接口，代理模式真实对象和代理对象实现相同的接口
                InvocationHandler h ： 代理对象的调用处理程序
         */
        SellTickets sellTickets = (SellTickets) Proxy.newProxyInstance(
                station.getClass().getClassLoader(),
                station.getClass().getInterfaces(),
                new InvocationHandler() {
                    @Override
                    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
                        System.out.println("收取服务费用和保险费用");
                        Object result = method.invoke(station, args);
                        System.out.println("售票成功");
                        return result;
                    }
                }
        );
        return sellTickets;
    }
}
